package com.myzl.coal.utils;

import com.myzl.common.utils.StringUtils;

import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.concurrent.TimeUnit;

/**
 *
 * 用于业务计算
 * @author Administrator
 * @date 2022年8月15日10:17:35
 */
public class CalculationUtils {

    /**
     * 计算介质重量
     * @param a 浓介总重量
     * @param b 浓介浓度
     * @param c 水密度
     * @param d 介质密度
     * @return 介质重量
     */
    public static BigDecimal getDensityWeight(BigDecimal a, BigDecimal b, BigDecimal c, BigDecimal d){
        BigDecimal e = a.multiply(d);
        BigDecimal denominator = a.multiply(c).multiply(d).divide(b,2, RoundingMode.HALF_UP).subtract(e);
        BigDecimal molecule = c.subtract(d);
        return denominator.divide(molecule,2, RoundingMode.HALF_UP);
    }

    /**
     * 计算水重量
     * @param b 浓介浓度
     * @param c 水密度
     * @param d 介质密度
     * @param y 介质重量
     * @return 水重量
     */
    public static BigDecimal getWaterWeight(BigDecimal b,BigDecimal c,BigDecimal d,BigDecimal y){
        BigDecimal e = c.multiply(y);
        BigDecimal denominator = c.multiply(b).multiply(y).divide(d,2, RoundingMode.HALF_UP).subtract(e);
        BigDecimal molecule = c.subtract(b);
        return denominator.divide(molecule,2, RoundingMode.HALF_UP);
    }

    /**
     * 线程休眠
     * @param flag 是否休眠
     * @param seconds 休眠时间，秒
     */
    public static void sleepSeconds(boolean flag,int seconds){
        if (flag){
            try {
                // 休眠 时间 s
                TimeUnit.SECONDS.sleep(seconds);
                //TimeUnit.DAYS.sleep(1); // 休眠 1 天
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

    /**
     * 获取处理过的液位
     * 根据算法向上取5的倍数
     * @param liquidLevel 液位
     * @return 液位
     */
    public static int handleLiquidLevel(String liquidLevel){
        BigDecimal a = new BigDecimal(liquidLevel);
        BigDecimal b = new BigDecimal("5");
        BigDecimal c = a.divide(b,0, RoundingMode.UP);
        BigDecimal d = c.multiply(b);
        return d.intValue();
    }

    /**
     * 除以10 并四舍五入
     * @param data 数据
     * @return 结果
     */
    public static int divideTen(String data){
        BigDecimal dataDecimal = new BigDecimal(data);
        BigDecimal resultDecimal = dataDecimal.divide(new BigDecimal("10"),0,RoundingMode.HALF_UP);
        return resultDecimal.intValue();
    }

    /**
     * 比较三个数的差值是否大于比较值
     * @param a 参数a
     * @param b 参数b
     * @param c 参数c
     * @return 结果
     */
    public static BigDecimal differenceValue(BigDecimal a, BigDecimal b, BigDecimal c){
        BigDecimal dValue1 = a.subtract(b).abs();
        BigDecimal dValue2 = a.subtract(c).abs();
        BigDecimal dValue3 = b.subtract(c).abs();
        BigDecimal max = max(dValue1, dValue2);
        max = max(max,dValue3);
        return max;
    }

    /**
     * 获取最大值
     * @param a 参数a
     * @param b 参数b
     * @return 最大值
     */
    public static BigDecimal max(BigDecimal a, BigDecimal b) {
        return a.compareTo(b) >= 0 ? a : b;
    }

    /**
     * 大于一万转换成万单位，保留两位小数
     * @param data 传入数据
     * @return 结果
     */
    public static String toW(String data){
        if(StringUtils.isEmpty(data)){
            return "0.00";
        }
        BigDecimal dataBigDecimal = new BigDecimal(data);
        BigDecimal tenThousands = new BigDecimal("10000");
        if (dataBigDecimal.compareTo(tenThousands) >= 0) {
            dataBigDecimal = dataBigDecimal.divide(tenThousands,2, RoundingMode.HALF_UP);
        } else {
            dataBigDecimal = dataBigDecimal.setScale(2,RoundingMode.HALF_UP);
        }
        return dataBigDecimal.toString();
    }

}
